using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using NiSis.Data;
using NiSis.Entities;
using NiSis.UserControls;
using System.Transactions;
using NiSis.Loggin;

namespace NiSis
{
    public partial class RelDefault : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                PoolsToActivate1.AutoPostBack = true;
            }
        }
        public void SaveDefaultRelations()
        {
            SshBatchRelazioni Rels = new SshBatchRelazioni();
            Rels.CdPool = PoolsToActivate1.GetCurrentPool().CdPool;
            Rels.CdStoricoMensileRete = PoolsToActivate1.GetCurrentPool().CdMeseInizioFornitura;
            //aggiunge i traders swittchin con le sue utenze.
            VTradersPrec CurrentPool = PoolsToActivate1.GetCurrentPool();

            VList<VSimpleTraderPrec> vTraders = DataRepository.VSimpleTraderPrecProvider.Get(
                string.Format(
                    "cd_pool='{0}' and cd_storico_mensile_rete='{1}'",
                        CurrentPool.CdPool, CurrentPool.CdMeseInizioFornitura), string.Empty);


            

            Rels.SshTraderPrecStoricoCollection = MappingUtil.MapTpToStorico(vTraders);

            foreach (SshTraderPrecStorico tr in Rels.SshTraderPrecStoricoCollection)
            {
                if (rbIpotizzato.Checked)
                    LoadUtenzeFromDb(tr, Rels, SshStatoRelazioniList.Ipotizzato, SshStatoRelazioniList.Consolidato, SshStatoRelazioniList.Confermato);
                else
                    LoadUtenzeFromDb(tr, Rels, SshStatoRelazioniList.Confermato, SshStatoRelazioniList.Consolidato);
                tr.State = (int)SshStatoRelazioniList.Ipotizzato;
                
                if (tr.SshUtenzeGasStoricoCollection.Count==0)
                    Rels.SshTraderPrecStoricoCollection.DeletedItems.Add(tr);
            }

            // shipper....
            SshSocieta soc = DataRepository.SshSocietaProvider.GetByCdSocietaTipologiaSocieta(ShipperDefault1.SelectedShipper(), "Shipper");
            SshSocietaStoricoChain soch = new SshSocietaStoricoChain();
            soch.CdSocieta = soc.CdSocieta;
            soch.DtIns = DateTime.Now;
            soch.IdTipologiaSocieta = 2;
            soch.RagioneSociale = soc.DsSocieta;
            soch.OrderKey=0;
            soch.Piva = string.Empty; 
            Rels.SshSocietaStoricoChainCollection.Add(soch);

            Rels.DtIns = System.DateTime.Now;
            Rels.DtUpd = System.DateTime.Now;
            //Rels.AcceptChanges();
            if (Rels.HasUtenze())
                DataRepository.SshBatchRelazioniProvider.DeepSave(Rels);
            CustomUtil.UpdatePoolState(Rels.CdPool, Rels.CdStoricoMensileRete);
        }
        

        protected SshSocietaStoricoChain getDefaultShipper(string cdPool)
        {
            VList<VShipperDefaultPool> SDefaults = DataRepository.VShipperDefaultPoolProvider.Get(string.Format("cd_pool='{0}'",cdPool), "cd_pool");
            if (SDefaults.Count == 0)
                return null;
            SshSocietaStoricoChain shipper = new SshSocietaStoricoChain();
            shipper.CdSocieta = SDefaults[0].CdSocieta;
            shipper.FullDescription = String.Format("{0} (shipper)", SDefaults[0].DsSocieta);
            shipper.IdTipologiaSocieta = 2; //shipper, todo, generare la enumeration
            shipper.Piva = string.Empty;
            shipper.RagioneSociale = SDefaults[0].DsSocieta;
            return shipper;
        }
        protected void CmdRelDefault_Click(object sender, EventArgs e)
        {
            
            if (ShipperDefault1.SelectedShipper()==string.Empty)
                return;
            if (!PoolsToActivate1.CanGoNext())
                return;

            using (TransactionScope ts= new TransactionScope())
            {
                try
                {
                    SaveDefaultRelations();
                    DataRepository.VTpUtenzeProvider.CleanUpHistory(PoolsToActivate1.MeseFornitura);
                    //pnlAssoc.Enabled = false;
                    PnlSuccess.Visible = true;
                    PoolsToActivate1.Hide();
                    pnlShipper.Visible = false;
                    ts.Complete();
                    Logger.Conferma("Operazione: salvataggio Relazione di default, esito:successo");
                }
                catch (Exception ex)
                {
                    ts.Dispose();
                    lblError.Text = String.Format("{0} {1}", lblError.Text, ex.Message);
                    pnlError.Visible = true;
                    Logger.ErroreGrave("Operazione:salvataggio Relazione di default, esito: Errore salvando la relazione di default", ex);
                }

            }
                 
        }
        protected void PoolsToActivate1_SelectedPoolChanged(object sender, PoolsToActivate.SelectedPoolChangedEventArgs e)
        {
            if (e.Stato == SshStatoRelazioniList.Confermato || e.Stato == SshStatoRelazioniList.Consolidato)
            {
                pnlShipper.Visible = false;
                return;
            }
            ShipperDefault1.LoadList(e.NewCdPool,e.CdMeseAnno);
            pnlShipper.Visible = ShipperDefault1.Count() > 0;
            PoolsToActivate1.Refresh();
        }
        public void LoadUtenzeFromDb(SshTraderPrecStorico tps, SshBatchRelazioni Relazioni, params SshStatoRelazioniList[] exclude)
        {
            VList<VTpUtenzeAll> utList = DataRepositoryUtils.PopolateUtenzeListAll(Relazioni.CdPool, tps.CdTraderPrecedente, Relazioni.CdStoricoMensileRete);
            //VList<VTpUtenzeAll> utList = DataRepository.VTpUtenzeAllProvider.Get(
            //    string.Format("Cd_Trader_Precedente='{0}' and cd_pool='{1}' and cd_storico_mensile_rete={2} ",
            //        tps.CdTraderPrecedente, Relazioni.CdPool, Relazioni.CdStoricoMensileRete),
            //        string.Empty);
            if (tps.SshUtenzeGasStoricoCollection == null)
                tps.SshUtenzeGasStoricoCollection = new TList<SshUtenzeGasStorico>();

            tps.SshUtenzeGasStoricoCollection.Clear();

            MappingUtil.MapVTPUserToSsh(utList, tps.SshUtenzeGasStoricoCollection, exclude);

        }
    }
}
